package com.camartsApp.mapper;

import com.camartsApp.dto.PhotoLikedDTO;
import com.camartsApp.dto.UserProfileDTO;
import com.camartsApp.entity.Photo;
import com.camartsApp.entity.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

@Mapper
public interface UserInfoMapper {
    User selectById(Long id);

    // 更新关注数
    int updateFollowingCount(@Param("id") Long id, @Param("delta") int delta);

    // 更新粉丝数
    int updateFollowerCount(@Param("id") Long id, @Param("delta") int delta);

    String selectAvatarById(@Param("id") Long id);
    String selectNicknameById(@Param("id") Long id);
    Long selectFollowingCountById(@Param("id") Long id);
    Long selectFollowersCountById(@Param("id") Long id);
    Long selectLikesCountById(@Param("id") Long id);
    String selectSignatureById(@Param("id") Long id);
    Byte selectStatusById(@Param("id") Long id);

    // 更新隐藏设置
    int updateHideSetting(@Param("id") Long id, @Param("field") String field, @Param("value") boolean value);

    // 查询某个隐藏设置
    Boolean getHideSetting(@Param("id") Long id, @Param("field") String field);
    /**
     * 根据用户ID查询其发布的照片ID列表
     */
   // List<Long> selectPhotoIdsByUserId(@Param("userId") Long userId);

// 查询用户发布的照片（包含 id 和 url）
    List<Photo> selectPhotosByUserId(@Param("userId") Long userId);

    /**
     * 更新指定用户的某张照片状态为已删除（status = 2）
     */
    int updatePhotoStatusByIdAndUserId(@Param("userId") Long userId, @Param("photoId") Long photoId);



    /**
     * 根据用户ID查询该用户点赞过的照片ID列表（来自 photo_user）
     */
    List<Long> selectLikedPhotoIdsByUserId(@Param("userId") Long userId);

    /**
     * 根据照片ID列表查询对应的ID和URL（使用PhotoLikedDTO）
     */
    List<PhotoLikedDTO> selectPhotoDetailsByIds(@Param("photoIds") List<Long> photoIds);





    // Long countFollowersByUserIdAndStatus(@Param("userId") Long userId, @Param("status") int status);

  //  Long countFollowingByUserIdAndStatus(@Param("userId") Long userId, @Param("status") int status);

    /**
     * 更新user表中的点赞数
     * @param userId 用户id
     * @param delta 增量（可以为负）
     * @return 状态
     */
    Integer updateLikedCount(@Param("id") Long userId, @Param("delta") int delta);

    /**
     * 根据用户ID查询用户的基本资料（头像、昵称、签名、关注数、粉丝数、获赞数）
     */
    UserProfileDTO selectUserProfileById(@Param("userId") Long userId);


}
